<?php

		//一个简单的解zip包类
		/**
		类名称:   CZip
		类功能：   解压缩ZIP包
		作者：     霍久兴
		使用说明：
		$zip = new CZip("F:/work/pic.zip","af/");
		$zip->unzip();
		生成日期：2005-07-29
		**/
		class CZip
		{    
		  var $savePath;   //解包存放的路径,为绝对路径
		var $zipFullPath; //ZIP包的完整路径
		var $srcPath;   //zip包所在的路径，必须为绝对路径
		var $zipName; //zip包名
		var $errCode;   //错误信息
		var $zipFile = array();   //zip的文件名
		function CZip($zip, $savePath = "./")
		{
			$this->savePath = $savePath;
			//获得ZIP包名
		  if(preg_match("/([[:alpha:]]:[\/\w]*)\/(\w*.zip$)/i", $zip, $match))
			{
		  $this->srcPath       = $match[1] . "/";
		  $this->zipName       = $match[2];
		  $this->zipFullPath = $zip;
		  return true;
		  }
		  else
		  {
			$this->errCode = "invalid file";
				  return false;
		  }
			 
		}
		/***
		  函数名： pMakeDir
		  函数功能：建立路径
		  函数参数：@strDir 为要建立的路径。 如建多级目录，目录以'/' 隔开
		**/
		function pMakeDir($strDir, $srcDir="./")
		{
		  //如果发现有'/',就分出来，建立路径
		  preg_match_all('/\w*\/{1}/', $strDir, $match);
			$strMatch = $srcDir;
			//print_r($match);
			for($i = 0; $i< sizeof($match[0]);$i++)
			{
		  $strMatch .= $match[0][$i];
		  if(!file_exists($strMatch))
		  {
			@mkdir($strMatch);
			@chmod(0777);
		  }
			}
			return $strMatch;
		}
		   
		//解压缩文件
		function unzip()
		{    
			if(file_exists($this->zipFullPath))
		  {
			  if(!file_exists($this->savePath))
		  $this->pMakeDir($this->savePath,"");
		  $zip = zip_open($this->zipFullPath);
		  if($zip)
		  {
			  while ($zip_entry = zip_read($zip))
				{
			  //获得ZIP下的文件或路录名
			$name = zip_entry_name($zip_entry);  
			  //建立文件名中包含的路径
			$curDir = $this->pMakeDir($name, $this->savePath);
					//打开ZIP包，以只读的方式
				  if (zip_entry_open($zip, $zip_entry, "r"))
			  {
				//读取ZIP包中的内容
				  $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));                    
				//如果是文件，则建立新文件
			  if(!preg_match("/\/$/", $name))
					  {
			  $handle = fopen($this->savePath . $name,'a+');
			  fwrite($handle, $buf);
			  fclose($handle);  
			zip_entry_close($zip_entry);
			  $this->zipFile[] = $name;
			  }
		  }
			}
			zip_close($zip);
		  }
		  else
		  {
			  $this->errCode = "无效的ZIP包";
			  return false;
		  }                  
		  }
		  return true;
		}
		   
		/***
		  函数名： delZip
		  函数功能：删除ZIP包
		**/
		  function delZip()
		{
			if(file_exists($this->zipFullPath))
			{
			  unlink($this->zipFullPath);
			}
		  }
		}
?>